package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql" // mysql 注册了 init()
)

var db *sql.DB

func init() {
	// mysql
	var err error
	dsn := "root:123456@tcp(127.0.0.1:3306)/test"
	db, err = sql.Open("mysql", dsn) // Open mysql
	if err != nil {
		log.Fatal(err)
	}
	db.SetConnMaxIdleTime(0) // 空闲连接的最大可复用时间
	db.SetConnMaxLifetime(0) // 连接的最大可复用时间
	db.SetMaxIdleConns(10)   // 设置空闲连接池中连接的最大数量
	db.SetMaxOpenConns(100)  // 设置打开数据库连接的最大数量
	// fmt.Println(db)
	// err = db.Ping() // 测试连接
	// if err != nil {
	// 	log.Fatal(err)
	// }
	// fmt.Println("连接成功")
}

type emp struct {
	birthday, firstname, lastname, hiredate string
	empno, gender                           int
}

func main() {

	// 查询
	s := "10015 or 1=1"
	query := "select * from employees where emp_no > ?" // 多条
	fmt.Println(query, s)
	stmt, err := db.Prepare(query)
	if err != nil {
		log.Fatal(err)
	}
	rows, err := stmt.Query(s)
	if err != nil {
		log.Fatal(err)
	}
	for rows.Next() {
		var e emp
		err = rows.Scan(&e.empno, &e.birthday, &e.firstname, &e.lastname, &e.gender, &e.hiredate) //
		if err != nil {
			continue
		}
		fmt.Println(e)
	}
	// rows, err := db.Query(query, s )
	// if err != nil {
	// 	log.Fatal(err)
	// }
	// fmt.Println(rows)

	// for rows.Next() {
	// 	var e emp
	// 	err = rows.Scan(&e.empno, &e.birthday, &e.firstname, &e.lastname, &e.gender, &e.hiredate) //
	// 	if err != nil {
	// 		continue
	// 	}
	// 	fmt.Println(e)
	// }

	// row := db.QueryRow(query)
	// fmt.Println(row)
	// if row.Err() != nil {
	// 	log.Fatal(row.Err().Error()) // os.Exit(1)
	// }

	// var e emp
	// err := row.Scan(&e.empno, &e.birthday, &e.firstname, &e.lastname, &e.gender, &e.hiredate) // 行，scan，提取字段值
	// // row.Scan(&e) // 有人帮你利用名称自动对应多好
	// if err != nil {
	// 	log.Fatal(err, "##########")
	// }
	// fmt.Println(e.empno, e.birthday, e.firstname, e.lastname, e.gender, e.hiredate)
	// fmt.Printf("%T %[1]v\n", e.birthday)
	// fmt.Println(time.Parse("2006-01-02", e.birthday))
}
